{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import torch\n",
    "import torch.nn.functional as F"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "outputs": [
    {
     "data": {
      "text/plain": "tensor([[[[  0.,   1.,   2.,   3.,   4.,   5.],\n          [  6.,   7.,   8.,   9.,  10.,  11.],\n          [ 12.,  13.,  14.,  15.,  16.,  17.],\n          [ 18.,  19.,  20.,  21.,  22.,  23.],\n          [ 24.,  25.,  26.,  27.,  28.,  29.],\n          [ 30.,  31.,  32.,  33.,  34.,  35.]],\n\n         [[ 36.,  37.,  38.,  39.,  40.,  41.],\n          [ 42.,  43.,  44.,  45.,  46.,  47.],\n          [ 48.,  49.,  50.,  51.,  52.,  53.],\n          [ 54.,  55.,  56.,  57.,  58.,  59.],\n          [ 60.,  61.,  62.,  63.,  64.,  65.],\n          [ 66.,  67.,  68.,  69.,  70.,  71.]],\n\n         [[ 72.,  73.,  74.,  75.,  76.,  77.],\n          [ 78.,  79.,  80.,  81.,  82.,  83.],\n          [ 84.,  85.,  86.,  87.,  88.,  89.],\n          [ 90.,  91.,  92.,  93.,  94.,  95.],\n          [ 96.,  97.,  98.,  99., 100., 101.],\n          [102., 103., 104., 105., 106., 107.]],\n\n         [[108., 109., 110., 111., 112., 113.],\n          [114., 115., 116., 117., 118., 119.],\n          [120., 121., 122., 123., 124., 125.],\n          [126., 127., 128., 129., 130., 131.],\n          [132., 133., 134., 135., 136., 137.],\n          [138., 139., 140., 141., 142., 143.]]]])"
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x = torch.arange(1 * 4 * 6 * 6).reshape((1, 4, 6, 6)).to(torch.float32)\n",
    "x"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "outputs": [
    {
     "data": {
      "text/plain": "tensor([[[  0.,   2.,   4.,  12.,  14.,  16.,  24.,  26.,  28.],\n         [  1.,   3.,   5.,  13.,  15.,  17.,  25.,  27.,  29.],\n         [  6.,   8.,  10.,  18.,  20.,  22.,  30.,  32.,  34.],\n         [  7.,   9.,  11.,  19.,  21.,  23.,  31.,  33.,  35.],\n         [ 36.,  38.,  40.,  48.,  50.,  52.,  60.,  62.,  64.],\n         [ 37.,  39.,  41.,  49.,  51.,  53.,  61.,  63.,  65.],\n         [ 42.,  44.,  46.,  54.,  56.,  58.,  66.,  68.,  70.],\n         [ 43.,  45.,  47.,  55.,  57.,  59.,  67.,  69.,  71.],\n         [ 72.,  74.,  76.,  84.,  86.,  88.,  96.,  98., 100.],\n         [ 73.,  75.,  77.,  85.,  87.,  89.,  97.,  99., 101.],\n         [ 78.,  80.,  82.,  90.,  92.,  94., 102., 104., 106.],\n         [ 79.,  81.,  83.,  91.,  93.,  95., 103., 105., 107.],\n         [108., 110., 112., 120., 122., 124., 132., 134., 136.],\n         [109., 111., 113., 121., 123., 125., 133., 135., 137.],\n         [114., 116., 118., 126., 128., 130., 138., 140., 142.],\n         [115., 117., 119., 127., 129., 131., 139., 141., 143.]]])"
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x = F.unfold(x, kernel_size=2, stride=2)\n",
    "x"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "outputs": [
    {
     "data": {
      "text/plain": "tensor([[[[[  0.,   2.,   4.],\n           [ 12.,  14.,  16.],\n           [ 24.,  26.,  28.]],\n\n          [[  1.,   3.,   5.],\n           [ 13.,  15.,  17.],\n           [ 25.,  27.,  29.]],\n\n          [[  6.,   8.,  10.],\n           [ 18.,  20.,  22.],\n           [ 30.,  32.,  34.]],\n\n          [[  7.,   9.,  11.],\n           [ 19.,  21.,  23.],\n           [ 31.,  33.,  35.]],\n\n          [[ 36.,  38.,  40.],\n           [ 48.,  50.,  52.],\n           [ 60.,  62.,  64.]],\n\n          [[ 37.,  39.,  41.],\n           [ 49.,  51.,  53.],\n           [ 61.,  63.,  65.]],\n\n          [[ 42.,  44.,  46.],\n           [ 54.,  56.,  58.],\n           [ 66.,  68.,  70.]],\n\n          [[ 43.,  45.,  47.],\n           [ 55.,  57.,  59.],\n           [ 67.,  69.,  71.]]],\n\n\n         [[[ 72.,  74.,  76.],\n           [ 84.,  86.,  88.],\n           [ 96.,  98., 100.]],\n\n          [[ 73.,  75.,  77.],\n           [ 85.,  87.,  89.],\n           [ 97.,  99., 101.]],\n\n          [[ 78.,  80.,  82.],\n           [ 90.,  92.,  94.],\n           [102., 104., 106.]],\n\n          [[ 79.,  81.,  83.],\n           [ 91.,  93.,  95.],\n           [103., 105., 107.]],\n\n          [[108., 110., 112.],\n           [120., 122., 124.],\n           [132., 134., 136.]],\n\n          [[109., 111., 113.],\n           [121., 123., 125.],\n           [133., 135., 137.]],\n\n          [[114., 116., 118.],\n           [126., 128., 130.],\n           [138., 140., 142.]],\n\n          [[115., 117., 119.],\n           [127., 129., 131.],\n           [139., 141., 143.]]]]])"
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x = x.view(1, 2, -1, 3, 3)\n",
    "x"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "outputs": [],
   "source": [],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  }
 ],
 "metadata": {
  "kernelspec": {
   "name": "pytorch",
   "language": "python",
   "display_name": "pytorch"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}